package com.shenzhenai.module_principles.demo2.before;

/**
 * @author huangzehui
 * @date 13/8/2025 上午12:12 周三
 * @description
 *
 * 12.设计模式-设计原则(里氏代换原则概述和案例)
 * https://www.bilibili.com/video/BV1Yt4y1B7Cm?spm_id_from=333.788.player.switch&vd_source=e07cc8cc94eb22bd76722071b03cd199&p=12
 */
public class RectangleDemo {

    public static void main(String[] args) {
        // 创建长方形对象
        Rectangle r = new Rectangle();

        // 设置长和宽
        r.setLength(20);
        r.setWidth(10);

        resize(r);
        printLengthAndWidth(r);

        System.out.println("++++++++++++++++++++++++++++++++++++");

        // 创建正方形
        Square s = new Square();
        s.setLength(40);
//        s.setWidth(40);

        resize(s);
        printLengthAndWidth(s);
    }

    /**
     * 扩宽方法
     *
     * 长方形可以正常运行，正方形直接就死循环了，违背了里氏替换原则
     *
     * 里氏替换原则，父级可以出现的地方，子类都可以出现。
     *
     * @param rectangle
     */
    public static void resize(Rectangle rectangle) {
        // 判断宽如果比长小，进行拓宽操作
        while (rectangle.getWidth() <= rectangle.getLength()) {
            rectangle.setWidth(rectangle.getWidth() + 1);
        }
    }

    // 打印长和宽
    public static void printLengthAndWidth(Rectangle rectangle) {
        System.out.println(rectangle.getLength());
        System.out.println(rectangle.getWidth());
    }
}
